library(tidyverse)
library(lubridate)
library(glue)
library(here)
library(ggtext)
library(patchwork)
library(kableExtra)
library(hrbrthemes)
library(tidytext)
library(wordcloud)
source(here("src/5-funcao-limpando-texto.R"))set.seed(1014)
knitr::knit_hooks$set(inline = function(x) prettyNum(x, big.mark = ".", decimal.mark = ","))
options(
digits = 1,
scipen = 999,
OutDec = ",",
knitr.kable.NA = "",
radian.auto_match = FALSE
)
Sys.setenv(LANGUAGE = "pt-br")
Sys.setlocale("LC_TIME", "pt_BR")
#> [1] ""
# helper
`%notin%` <- function(x, y) !(x %in% y)source(here("src/0-paleta-de-cores.R"), encoding = "UTF-8")
theme_set(theme_minimal())
theme_update(
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "gray97", color = "transparent")
)pedidos_cgu <- "dados/load/rds/pedidos-cgu.rds" %>%
here() %>%
readRDS() %>%
rename(orgao = orgaodestinatario) %>%
filter(decisao %notin% c(
"Pergunta Duplicada/Repetida",
"Não se trata de solicitação de informação"
))
pedidos_clean <- "dados/load/rds/pedidos-clean.rds" %>%
here() %>%
readRDS()
recursos_clean <- "dados/load/rds/recursos-clean.rds" %>%
here() %>%
readRDS() pedidos_clean <- pedidos_clean %>%
mutate(
usa_lgpd_pedido_resumido = str_detect(resumo_solicitacao_clean, "LGPD"),
usa_lgpd_pedido = str_detect(detalhamento_solicitacao_clean, "LGPD"),
usa_lgpd_resposta = str_detect(resposta_clean, "LGPD")
)
lgpd <- pedidos_cgu %>%
select(
id_pedido, orgao, data_registro,
resumo_solicitacao, detalhamento_solicitacao,
resposta, decisao, assunto_pedido
) %>%
left_join(pedidos_clean) %>%
mutate(
usa_lgpd_assunto = assunto_pedido == "Dados Pessoais - LGPD",
usa_lgpd_pedido_resumido = replace_na(usa_lgpd_pedido_resumido, FALSE),
usa_lgpd = !(!usa_lgpd_pedido_resumido &
!usa_lgpd_pedido &
!usa_lgpd_resposta &
!usa_lgpd_assunto)
)O gráfico abaixo mostra a evolução dos pedidos onde alguma menção à LGPD foi detectada tanto no pedido quanto na resposta.
lgpd %>%
filter(year(data_registro) >= 2018) %>%
count(data_registro, usa_lgpd) %>%
mutate(usa_lgpd = if_else(usa_lgpd, "Sim (quantidade)", "Não")) %>%
ggplot(aes(x = data_registro, y = n, fill = reorder(usa_lgpd, -n))) +
geom_col() +
geom_text(
data = . %>%
add_count(data_registro, wt = n) %>%
filter(usa_lgpd == "Não") %>%
mutate(nn - n) %>%
filter(`nn - n` > 0),
aes(
y = `nn - n`,
label = `nn - n`,
),
color = cores_aep[["rosa"]],
vjust = -.5,
hjust = 0,
size = 2.5,
fontface = "bold",
angle = 45
) +
labs(
title = "Detecção dos termos relacionados a LGPD",
subtitle = "Considerando menções no pedido e na resposta",
x = NULL,
y = "Quantidade de pedidos",
fill = "Pedido\nmenciona LGPD"
) +
scale_fill_manual(values = c(alpha(cores_aep[["laranja"]], .5),
cores_aep[["rosa"]])) +
scale_x_date(date_breaks = "6 months", date_labels = "%b-%Y") +
theme(axis.ticks.x = element_line())lgpd_counts <- lgpd %>%
select(data_registro, where(is.logical)) %>%
filter(usa_lgpd) %>%
mutate(
data_registro,
mencao_lgpd = case_when(
!usa_lgpd_assunto &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido ~ str_glue(
"Solicitante não menciona LGPD em pedido,",
"\nórgão menciona na resposta"
),
TRUE ~ "Solicitante menciona LGPD no pedido ou assunto do pedido"
)
) %>%
count(data_registro, mencao_lgpd)O pico de Abril de 2020 pode ser explicado por pedidos que mencionam a LGPD ou no assunto (ao fazer o pedido, o solicitante seleciona a opção “Dados Pessoais - LGPD” no campo “Assunto do pedido”) ou no conteúdo do pedido
lgpd_counts %>%
ggplot(aes(x = data_registro, y = n, color = reorder(mencao_lgpd, -n))) +
geom_line(size = 1.3) +
geom_point(size = 2) +
scale_color_manual(values = c(cores_tb[["azul"]], cores_aep[["rosa"]])) +
labs(title = "Onde a LGPD foi mencionada",
color = NULL,
x = "Quantidade",
y = "Ano"
) +
theme(legend.position = "top",
legend.direction = "vertical",
legend.justification = "left")Analisando ano a ano, agregando os meses, as solicitações respondidas com menções à LGPD, praticamente dobrou em 2021 em relação à 2020.
lgpd_counts %>%
count(ano = year(data_registro), mencao_lgpd,
wt = n, name = "n") %>%
ggplot(aes(x = ano, y = n, color = mencao_lgpd)) +
geom_line(
data = . %>%
filter(mencao_lgpd != str_glue("Solicitante não menciona LGPD em pedido,",
"\nórgão menciona na resposta")),
size = 1.3) +
geom_point(
data = . %>%
filter(mencao_lgpd != str_glue("Solicitante não menciona LGPD em pedido,",
"\nórgão menciona na resposta")),
size = 2.3, shape = 17) +
geom_line(
data = . %>%
filter(mencao_lgpd == str_glue("Solicitante não menciona LGPD em pedido,",
"\nórgão menciona na resposta")),
size = 1.3) +
geom_point(
data = . %>%
filter(mencao_lgpd == str_glue("Solicitante não menciona LGPD em pedido,",
"\nórgão menciona na resposta")),
size = 2) +
scale_color_manual(values = c(cores_tb[["azul"]], cores_aep[["rosa"]])) +
labs(title = "Onde a LGPD foi mencionada",
color = NULL,
x = "Quantidade",
y = "Ano"
) +
theme(
legend.position = "top",
legend.direction = "vertical",
legend.justification = "left"
)lgpd_counts %>%
filter(str_detect(mencao_lgpd, "Solicitante não menciona LGPD em pedido")) %>%
mutate(mencao_lgpd = str_replace(mencao_lgpd, "\\n", " ")) %>%
ggplot(aes(x = data_registro, y = n, fill = mencao_lgpd)) +
geom_col() +
scale_fill_manual(values = cores_aep[["rosa"]]) +
labs(
y = "Quantidade de resposta",
x = NULL,
title = str_glue(
"Evolução do uso da LGPD nas respostas dos ",
"pedidos de acesso a informação via LAI"
),
fill = NULL
) +
theme(
legend.justification = "left",
legend.position = "top"
)Quantidade de vezes que órgãos citaram LGPD para responder algum pedido:
O termo LGPD foi detectado na resposta do pedido, mas o solicitante não menciona o assunto no pedido (o termo não é detectado no pedido).
qt_lgpd <- lgpd %>%
filter(
usa_lgpd_resposta &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido &
assunto_pedido != "Dados Pessoais - LGPD"
) %>%
count(ano = year(data_registro), usa_lgpd_resposta, usa_lgpd_pedido)
qt_lgpd %>%
ggplot(aes(x = ano, y = cumsum(n))) +
geom_col(fill = cores_aep[["laranja"]]) +
geom_text(aes(label = cumsum(n)), vjust = 0) +
labs(
x = "Ano",
y = "Quantidade (acumulada)",
title = "Quantidade acumulada de respostas dadas citando LGPD",
subtitle = str_glue(
"Até setembro de 2021 foram {sum(qt_lgpd$n)} ",
"usos da LGPD em respostas aos solicitantes pelos órgãos, sem que os \n",
"solicitantes façam menções à LGPD no pedido"
))lgpd %>%
filter(
usa_lgpd_resposta &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido &
assunto_pedido != "Dados Pessoais - LGPD"
) %>%
count(assunto_pedido, sort = T) %>%
slice_max(n = 10, order_by = n) %>%
ggplot(aes(x = reorder(assunto_pedido, n), y = n)) +
geom_col(fill = cores_tb[["azul"]]) +
geom_text(aes(label = n), hjust = 0) +
labs(
title = "10 principais assuntos em que em que o órgão mencionou LGPD na resposta",
y = "Quntidade de pedidos",
x = NULL
) +
coord_flip()lgpd %>%
filter(
usa_lgpd_resposta &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido &
assunto_pedido != "Dados Pessoais - LGPD"
) %>%
count(decisao, sort = T) %>%
slice_max(n = 10, order_by = n) %>%
ggplot(aes(x = reorder(decisao, n), y = n)) +
geom_col(aes(fill = decisao), show.legend = F) +
geom_text(aes(label = n), hjust = 0) +
labs(
title = "Decisão mais frequente quando órgão menciona LGPD na resposta",
y = "Quntidade de pedidos",
x = NULL
) +
scale_fill_manual(values = cores_decisao2) +
coord_flip()O gráfico abaixo mostra os órgãos que mencionaram a LGPD, considerando somente pedidos em que o solicitante não menciona ou não faz referência à LGPD no pedido.
lgpd %>%
filter(
usa_lgpd_resposta &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido &
assunto_pedido != "Dados Pessoais - LGPD"
) %>%
count(sigla = str_extract(orgao, "^[:upper:]+(?= )|^GSI-PR"), sort = T) %>%
group_by(n) %>%
nest() %>%
ungroup() %>%
mutate(
sigla = map(data, pull, sigla),
sigla = paste(sigla),
sigla = str_remove_all(sigla, "^c\\(|\\\"|\\)" ),
sigla = str_wrap(sigla, 100)
) %>%
filter(n > 10) %>%
ggplot(aes(x = reorder(sigla, n), y = n)) +
geom_col(fill = cores_aep[["rosa"]]) +
geom_text(aes(label = n), hjust = 0) +
coord_flip() +
labs(
title = "Quantidade de respostas que mencionam a LGPD, por órgão",
subtitle = str_glue(
"Solicitante não menciona LGPD em pedido ou assunto do pedido, ",
"órgão menciona na resposta"
),
x = "Órgão (sigla)",
y = "Quantidade de pedidos respondidos"
)Ministério da Saúde nega pedidos de acesso a informação em casos relacionados a pandemia.
plot_historico_mencao_lgpd <- function(df, nome_orgao) {
df <- df %>%
filter(orgao == nome_orgao) %>%
filter(
usa_lgpd_resposta &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido &
assunto_pedido != "Dados Pessoais - LGPD"
) %>%
count(data_registro, orgao)
df %>%
ggplot(aes(x = data_registro, y = n)) +
geom_col(fill = cores_aep[["rosa"]]) +
scale_x_date(date_labels = "%b-%Y") +
labs(
title = str_glue("{unique(df$orgao)}"),
subtitle = "Menções à LGPD apenas na resposta e ausentes nos pedidos",
x = NULL,
y = "Quantidade de pedidos respondidos"
)
}
plot_assuntos_mencao_lgpd <- function(df, nome_orgao) {
df <- df %>%
filter(orgao == nome_orgao) %>%
filter(
usa_lgpd_resposta &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido &
assunto_pedido != "Dados Pessoais - LGPD"
) %>%
count(assunto_pedido = str_wrap(assunto_pedido, 30), orgao, sort = T) %>%
filter(row_number() <= 10)
df %>%
ggplot(aes(y = n, x = reorder(assunto_pedido, n))) +
geom_col(fill = cores_aep[["laranja"]]) +
geom_text(aes(label = n), hjust = 0) +
coord_flip() +
labs(
title = str_glue("Principais assuntos - {unique(df$orgao)}"),
subtitle = "Assuntos abordados que levaram o órgão a responder com menção a LGPD",
x = NULL,
y = "Quantidade de pedidos"
)
}
plot_decisoes_mencao_lgpd <- function(df, nome_orgao) {
df <- df %>%
filter(orgao == nome_orgao) %>%
filter(
usa_lgpd_resposta &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido &
assunto_pedido != "Dados Pessoais - LGPD"
) %>%
count(orgao, data_registro, decisao = str_wrap(decisao, 25), sort = T)
cores_decisao <- str_wrap(cores_decisao[-c(2, 5)], 25)
df %>%
ggplot(aes(x = data_registro, y = n, color = decisao)) +
geom_line(size = .8) +
scale_color_manual(values = cores_decisao) +
scale_x_date(date_labels = "%b-%Y") +
labs(
title = str_glue("{unique(df$orgao)}"),
subtitle = "Menção à LGPD e decisão sobre acesso",
x = NULL,
y = "Quantidade"
)
}
plot_wordcloud_mencao_lgpd <- function(df, nome_orgao) {
df <- df %>%
filter(orgao == nome_orgao) %>%
filter(
usa_lgpd_resposta &
!usa_lgpd_pedido &
!usa_lgpd_pedido_resumido &
assunto_pedido != "Dados Pessoais - LGPD"
) %>%
select(id_pedido, detalhamento_solicitacao_clean) %>%
unnest_tokens(word, detalhamento_solicitacao_clean) %>%
anti_join(stopwords) %>%
mutate(
word = str_extract(word, "[a-z']+"),
word = if_else(word == "urltag", "link-url", word)
) %>%
filter(!str_count(word) %in% c(1, 2)) %>%
count(word, sort = T)
df %>%
with(
wordcloud(
word,
n,
max.words = 150,
random.order = F,
random.color = F,
main = title,
colors = c(
cores_tb[["cinza_claro"]],
cores_aep[["laranja"]],
cores_aep[["rosa"]],
cores_tb[["azul"]]
)
)
)
}plot_historico_mencao_lgpd(lgpd, "MS – Ministério da Saúde")plot_assuntos_mencao_lgpd(lgpd, "MS – Ministério da Saúde")plot_decisoes_mencao_lgpd(lgpd, "MS – Ministério da Saúde")plot_wordcloud_mencao_lgpd(lgpd, "MS – Ministério da Saúde")plot_historico_mencao_lgpd(lgpd, "INCRA – Instituto Nacional de Colonização e Reforma Agrária") plot_assuntos_mencao_lgpd(lgpd, "INCRA – Instituto Nacional de Colonização e Reforma Agrária") plot_decisoes_mencao_lgpd(lgpd, "INCRA – Instituto Nacional de Colonização e Reforma Agrária")plot_wordcloud_mencao_lgpd(lgpd, "INCRA – Instituto Nacional de Colonização e Reforma Agrária")plot_historico_mencao_lgpd(lgpd, "IMBEL – Indústria de Material Bélico do Brasil")plot_assuntos_mencao_lgpd(lgpd, "IMBEL – Indústria de Material Bélico do Brasil")plot_decisoes_mencao_lgpd(lgpd, "IMBEL – Indústria de Material Bélico do Brasil")plot_wordcloud_mencao_lgpd(lgpd, "IMBEL – Indústria de Material Bélico do Brasil")plot_historico_mencao_lgpd(lgpd, "GSI-PR – Gabinete de Segurança Institucional da Presidência da República")plot_assuntos_mencao_lgpd(lgpd, "GSI-PR – Gabinete de Segurança Institucional da Presidência da República")plot_decisoes_mencao_lgpd(lgpd, "GSI-PR – Gabinete de Segurança Institucional da Presidência da República")plot_wordcloud_mencao_lgpd(lgpd, "GSI-PR – Gabinete de Segurança Institucional da Presidência da República")plot_historico_mencao_lgpd(lgpd, "ME - Ministério da Economia")plot_assuntos_mencao_lgpd(lgpd, "ME - Ministério da Economia")plot_decisoes_mencao_lgpd(lgpd, "ME - Ministério da Economia")plot_wordcloud_mencao_lgpd(lgpd, "ME - Ministério da Economia")plot_historico_mencao_lgpd(lgpd, "CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico") plot_assuntos_mencao_lgpd(lgpd, "CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico") plot_decisoes_mencao_lgpd(lgpd, "CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico")plot_wordcloud_mencao_lgpd(lgpd, "CNPQ – Conselho Nacional de Desenvolvimento Científico e Tecnológico")plot_historico_mencao_lgpd(lgpd, "INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira")plot_assuntos_mencao_lgpd(lgpd, "INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira")plot_decisoes_mencao_lgpd(lgpd, "INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira")plot_wordcloud_mencao_lgpd(lgpd, "INEP – Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira")plot_historico_mencao_lgpd(lgpd, "MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos")plot_assuntos_mencao_lgpd(lgpd, "MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos")plot_decisoes_mencao_lgpd(lgpd, "MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos")plot_wordcloud_mencao_lgpd(lgpd, "MMFDH – Ministério da Mulher, da Família e dos Direitos Humanos")plot_historico_mencao_lgpd(lgpd, "ANEEL – Agência Nacional de Energia Elétrica") plot_assuntos_mencao_lgpd(lgpd, "ANEEL – Agência Nacional de Energia Elétrica") plot_decisoes_mencao_lgpd(lgpd, "ANEEL – Agência Nacional de Energia Elétrica")plot_wordcloud_mencao_lgpd(lgpd, "ANEEL – Agência Nacional de Energia Elétrica")plot_historico_mencao_lgpd(lgpd, "CGU – Controladoria-Geral da União") plot_assuntos_mencao_lgpd(lgpd, "CGU – Controladoria-Geral da União") plot_decisoes_mencao_lgpd(lgpd, "CGU – Controladoria-Geral da União")plot_wordcloud_mencao_lgpd(lgpd, "CGU – Controladoria-Geral da União")plot_historico_mencao_lgpd(lgpd, "MCTI – Ministério da Ciência, Tecnologia, Inovações")plot_assuntos_mencao_lgpd(lgpd, "MCTI – Ministério da Ciência, Tecnologia, Inovações")plot_decisoes_mencao_lgpd(lgpd, "MCTI – Ministério da Ciência, Tecnologia, Inovações")plot_wordcloud_mencao_lgpd(lgpd, "MCTI – Ministério da Ciência, Tecnologia, Inovações")plot_historico_mencao_lgpd(lgpd, "PETROBRAS – Petróleo Brasileiro S.A.")plot_assuntos_mencao_lgpd(lgpd, "PETROBRAS – Petróleo Brasileiro S.A.")plot_decisoes_mencao_lgpd(lgpd, "PETROBRAS – Petróleo Brasileiro S.A.")plot_wordcloud_mencao_lgpd(lgpd, "PETROBRAS – Petróleo Brasileiro S.A.")plot_historico_mencao_lgpd(lgpd, "MAPA – Ministério da Agricultura, Pecuária e Abastecimento")plot_assuntos_mencao_lgpd(lgpd, "MAPA – Ministério da Agricultura, Pecuária e Abastecimento")plot_decisoes_mencao_lgpd(lgpd, "MAPA – Ministério da Agricultura, Pecuária e Abastecimento")plot_wordcloud_mencao_lgpd(lgpd, "MAPA – Ministério da Agricultura, Pecuária e Abastecimento")plot_historico_mencao_lgpd(lgpd, "MD – Ministério da Defesa")plot_assuntos_mencao_lgpd(lgpd, "MD – Ministério da Defesa")plot_decisoes_mencao_lgpd(lgpd, "MD – Ministério da Defesa")plot_wordcloud_mencao_lgpd(lgpd, "MD – Ministério da Defesa")plot_historico_mencao_lgpd(lgpd, "ANVISA – Agência Nacional de Vigilância Sanitária")plot_assuntos_mencao_lgpd(lgpd, "ANVISA – Agência Nacional de Vigilância Sanitária")plot_decisoes_mencao_lgpd(lgpd, "ANVISA – Agência Nacional de Vigilância Sanitária")plot_wordcloud_mencao_lgpd(lgpd, "ANVISA – Agência Nacional de Vigilância Sanitária")plot_historico_mencao_lgpd(lgpd, "BB – Banco do Brasil S.A.")plot_assuntos_mencao_lgpd(lgpd, "BB – Banco do Brasil S.A.")plot_decisoes_mencao_lgpd(lgpd, "BB – Banco do Brasil S.A.")plot_wordcloud_mencao_lgpd(lgpd, "BB – Banco do Brasil S.A.")